문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 인라인 함수 (문단 편집) == 인라이닝의 성능상 의의 == 보통 브랜칭 및 함수 호출은 근대적인 CPU 파이프라인 구조에서 비교적 비싼 축에 속하는 작업이다. 이를 막고 직접 내용물을 넣으면 호출 코스트를 부담할 필요가 없기 때문에 인라이닝을 하는 것이다. 따라서 간단한 작업 (e.g., 클래스 내 멤버 반환, 덧셈 수행 등)의 경우 인라이닝을 하여 높은 비중의 함수 호출 코스트를 줄이는 것은 분명 매력적인 방법이긴 하다. 다만 인라인의 진짜 가치는 함수 호출 비용을 제거하는 데에 있는 것이 아니라, 인라인 이후 '''추가적으로 이루어지는 최적화'''를 가능하게 만드는 것에 있다. 이를테면 두 개의 정수를 받아 더하는 add 함수가 있다고 할 때, add(0, 1)은 누가 봐도 1로 치환 가능하지만 인라인 이전까지는 컴파일러가 이에 대해 알 도리가 없다. 실세계에서는 STL의 사용이 좋은 사례로, 코드를 보면 몇 단계에 걸친 함수 호출이 이루어지지만 실제 어셈블리를 보면 불필요한 로직이 전부 삭제되고 꼭 필요한 명령어 몇개만 남는 것을 볼 수 있다. 물론 전역 최적화의 목적 역시 동일하지만 이 쪽은 드는 시간이 워낙에 큰 관계로... 하지만 무차별적으로 쓸 경우 코드상에서 중복되는 부분이 컴파일 결과 바이너리에 산재하게 되며, 이는 비단 바이너리의 크기만 증가시키는 것이 아니라 브랜칭 예측률 및 instruction 캐시 적중률을 낮추는 효과가 있다. 즉 복잡한 함수를 여러군데에서 인라이닝하면 프로그램 크기는 커질대로 커지고 성능은 오히려 감소하는 현상이 일어난다. 다만 요즘은 컴파일러의 발달로 인해 {{{inline}}}을 쓰든 안 쓰든 상관없이 최적화 중 함수의 인라이닝 여부를 자의적으로 판단하기 때문에 의미가 상당히 퇴색된 것은 사실이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기